package io.renren.modules.weixin.handler;

import io.renren.common.utils.Constant;
import io.renren.common.utils.Dom4jHelper;
import io.renren.modules.weixin.message.BaseReq;
import io.renren.modules.weixin.message.reqevent.*;
import io.renren.modules.weixin.message.responsemsg.BaseMsg;
import io.renren.modules.weixin.message.responsemsg.TextMsg;
import io.renren.modules.weixin.service.WeixinFanService;
import io.renren.modules.weixin.util.WeiXinUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Author: zhangxinlin
 * @Description:
 * @Date: Create in 22:41 2018/1/25
 * @Modified By：
 */
@Component
public class DispatcherEventHandler implements EventHandler<Dom4jHelper> {

    @Autowired
    private WeixinFanService weixinFanService;

    private String prifxReqEventBean = "io.renren.modules.weixin.message.reqevent.";

    private Logger logger = LoggerFactory.getLogger(DispatcherEventHandler.class);

    /**
     * @Author: zhangxinlin
     * @Description: 分发事件处理handler
     * @Date: 22:42 2018/1/25
     */
    @Override
    public BaseMsg handle(Dom4jHelper event) {
        String eventType = event.getElementValue("event");
        if(Constant.ReqEventType.SUBSCRIBE.equalsIgnoreCase(eventType)){
            //用户关注事件

            //将接入事件转换成对应事件bean
            BaseReq subcribe = WeiXinUtils.buildReqEvent("BaseReqEvent", event, prifxReqEventBean);
            logger.info("微信公众号关注事件，{}",subcribe.toString());





        }else if(Constant.ReqEventType.UNSUBSCRIBE.equalsIgnoreCase(eventType)){
            //用户取消关注事件

        }
        return null;
    }


    @Override
    public boolean beforeHandle(Dom4jHelper event) {
        return false;
    }


    /**
     * 处理取消关注事件，有需要时子类重写
     *
     * @param event 取消关注事件对象
     * @return 响应消息对象
     */
    protected BaseMsg handleUnsubscribe(BaseReqEvent event) {
        return null;
    }

    /**
     * 处理扫描二维码事件，有需要时子类重写
     *
     * @param event 扫描二维码事件对象
     * @return 响应消息对象
     */
    protected BaseMsg handleQrCodeEvent(QrCodeEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理地理位置事件，有需要时子类重写
     *
     * @param event 地理位置事件对象
     * @return 响应消息对象
     */
    protected BaseMsg handleLocationEvent(LocationEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理菜单点击事件，有需要时子类重写
     *
     * @param event 菜单点击事件对象
     * @return 响应消息对象
     */
    protected BaseMsg handleMenuClickEvent(MenuEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理菜单跳转事件，有需要时子类重写
     *
     * @param event 菜单跳转事件对象
     * @return 响应消息对象
     */
    protected BaseMsg handleMenuViewEvent(MenuEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理菜单扫描推事件，有需要时子类重写
     *
     * @param event 菜单扫描推事件对象
     * @return 响应的消息对象
     */
    protected BaseMsg handleScanCodeEvent(ScanCodeEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理菜单弹出相册事件，有需要时子类重写
     *
     * @param event 菜单弹出相册事件
     * @return 响应的消息对象
     */
    protected BaseMsg handlePSendPicsInfoEvent(SendPicsInfoEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理模版消息发送事件，有需要时子类重写
     *
     * @param event 菜单弹出相册事件
     * @return 响应的消息对象
     */
    protected BaseMsg handleTemplateMsgEvent(TemplateMsgEvent event) {
        return handleDefaultEvent(event);
    }

    /**
     * 处理添加关注事件，有需要时子类重写
     *
     * @param event 添加关注事件对象
     * @return 响应消息对象
     */
    protected BaseMsg handleSubscribe(BaseReqEvent event) {
        return new TextMsg("感谢您的关注!");
    }

    /**
     * 接收群发消息的回调方法
     *
     * @param event 群发回调方法
     * @return 响应消息对象
     */
    protected  BaseMsg callBackAllMessage(SendMessageEvent event){return  handleDefaultEvent(event);}



    protected BaseMsg handleDefaultEvent(BaseReqEvent event) {
        return null;
    }
}
